有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

二进制字符串到整数转换器中的java错误

我在代码中实现了二进制字符串到整数的方法。问题是我得到了错误的方法输出结果的最后两位数字,例如:

应为结果:111111000010010110000100

结果:1111110000100101100000011

结果的最后两位数总是有问题

任何帮助都将不胜感激

代码:

public static int binaryStringToInteger (String binaryString){
char[] digits = binaryString.toCharArray();
int binaryInteger = 0;
int count = 0;
for(int i=digits.length-1;i>=0;i--)
  {
    if(digits[i]=='1') 
         {
          binaryInteger +=(int)Math.pow(2, count);
         }
    count++;
  }
 return binaryInteger;
}

共 (5) 个答案

  1. # 1 楼答案

    我希望这个测试结果会有所帮助。 它非常明确地告诉你发生了什么

    binStr = 1 int = 1
    binStr = 11 int = 3
    binStr = 111 int = 7
    binStr = 1111 int = 15
    binStr = 11111 int = 31
    binStr = 111111 int = 63
    binStr = 1111111 int = 127
    binStr = 11111111 int = 255
    binStr = 111111111 int = 511
    binStr = 1111111111 int = 1023
    binStr = 11111111111 int = 2047
    binStr = 111111111111 int = 4095
    binStr = 1111111111111 int = 8191
    binStr = 11111111111111 int = 16383
    binStr = 111111111111111 int = 32767
    binStr = 1111111111111111 int = 65535
    binStr = 11111111111111111 int = 131071
    binStr = 111111111111111111 int = 262143
    binStr = 1111111111111111111 int = 524287
    binStr = 11111111111111111111 int = 1048575
    binStr = 111111111111111111111 int = 2097151
    binStr = 1111111111111111111111 int = 4194303
    binStr = 11111111111111111111111 int = 8388607
    binStr = 111111111111111111111111 int = 16777215
    binStr = 1111111111111111111111111 int = 33554431
    binStr = 11111111111111111111111111 int = 67108863
    binStr = 111111111111111111111111111 int = 134217727
    binStr = 1111111111111111111111111111 int = 268435455
    binStr = 11111111111111111111111111111 int = 536870911
    binStr = 111111111111111111111111111111 int = 1073741823
    binStr = 1111111111111111111111111111111 int = 2147483647
    binStr = 11111111111111111111111111111111 int = -2
    binStr = 111111111111111111111111111111111 int = 2147483645
    binStr = 1111111111111111111111111111111111 int = -4
    
  2. # 2 楼答案

    除了int类型只能容纳这么多之外,您的代码没有任何错误。Int保存4个字节,即8bitsx4=32位,第一个字节保留用于符号,如果为1则为负,如果为0则为正。 尝试使用包含64位的long int:

    public static long binaryStringToInteger (String binaryString){
        char[] digits = binaryString.toCharArray();
        long binaryInteger = 0;
        int count = 0;
        for(int i=digits.length-1;i>=0;i--)
          {
            if(digits[i]=='1') 
                 {
                  binaryInteger +=(long)Math.pow(2, count);
                 }
            count++;
          }
         return binaryInteger;
        }
    

    也请检查此项:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

  3. # 3 楼答案

    您遇到了转换问题:

    2^31 > 2^31-1 = Integer.MAX_VALUE

    因此language specification中的以下部分描述了从doubleint的转换:

    The value must be too large (a positive value of large magnitude or positive infinity), and the result [...] is the largest representable value of type int [...].

    因此,最后增加的值是2^31-1,而不是引起问题的2^31

  4. # 4 楼答案

    public static long binaryStringToInteger (String binaryString){
    char[] digits = binaryString.toCharArray();
    long binaryInteger = 0;
    long count = 0;
    for(int i=digits.length-1;i>=0;i--)
    {
        if(digits[i]=='1') 
         {
          binaryInteger +=(long)Math.pow(2, count);
         }
    count++;
    }
     return binaryInteger;
    }
    

    转换binaryInteger时:

    Long.toBinaryString(binaryInteger);
    
  5. # 5 楼答案

    我认为有符号整数值有问题,因此应将适当的字符(我认为最后一个字符)视为符号位,如下所示

    public static int binaryStringToInteger (String binaryString){
        char[] digits = binaryString.toCharArray();
        int binaryInteger = 0;
        int count = 0;
        for(int i=digits.length-2; i>=0;i--)
        {
            if(digits[i]=='1') 
            {
                 binaryInteger +=(int)Math.pow(2, count);
            }
            count++;
        }
        if(digits[digits.length-1] =='1') 
        {
            binaryInteger *= -1 ;
        }
    
        return binaryInteger;
    }
    

    也是整数。tobinarysting()创建一个无符号二进制字符串